# Changelog

For a full "picture", there are:
- [the git repository on GitLab.com](https://gitlab.com/RyDroid/PlanetWars2dRT-core)
- [the GitLab instance of ENSICAEN](https://gitlab.ecole.ensicaen.fr/spanti/PlanetWars2dRT-core)

## Version history

### Version 0.10 (planned)

- Adding at least one algorithm to compute paths (to avoid black holes, etc)

### Version 0.8 (planned)

- Adding extensions to the gameplay
  - Adding the possibility to upgrade a planet
  - Adding the possibility for a planet to repair ships around
  - Adding the possibility for a ship to produce ships
  - Adding supernova(s), a supernova is a star that can blow up and so destroy ships around

### Version 0.6 (planned)

- Adding the possibility to record statistics and analyze them (average number of ships, etc)

### Version 0.4 (planned)

- Adding extensions to the gameplay
  - Adding black hole(s) that destroy ships that can go in it
  - Adding wormhole(s), when a ship goes in one wormhole the ship is teleported at the output of an other wormhole
  - Asteroid barrier that act like destructible walls with random collisions
- player.act returns command(s) and can not change args

### Version 0.2 (planned)

- Ships now turn precisely
- Implementing [the design pattern observer](https://en.wikipedia.org/wiki/Observer_pattern)
  - ship: onMove, onLifeChange, onDestroy
  - planet: onLifeChange, onPlayerChange, onShipCreation
  - universe: onShipsCreation, onShipsDestruction, onNbShipsChange
  - game
- Some type names change (for better clarity and a bug with at least g++ 4.9):
  - `game_playing` -> `game_playing_t`
  - `game`         -> `game_t`
  - `player`       -> `player_t`
  - `universe`     -> `universe_t`
  - `planet`       -> `planet_t`
  - `ship`         -> `ship_t`
  - `observer`     -> `observer_t`
  - `observers`    -> `observers_t`
- Adding structs and functions for a player to select and move ships
- Adding artificial intelligences
- Adding generic functions to minimize the code of the view
- Adding hard coded universes and a function to generate a random one
- Adding an auto-dispatcher for ships on creation
- Planets now produce ship(s) less frequently by default

### Version 0.1

#### Version 0.1.1

- Adding functions related to future elements of a universe (so a GUI can warn if it does not support them)
- Adding functions that can be useful in a GUI to select ships
- A neutral planet can now produce ships or not
- Fixing some problems of the controller related to collisions

#### Version 0.1.0

- Creating the architecture (Model-View-Controller)
- Implementing the model and controller for ship, planet, universe, player and game
- Implementing a basic view in text

## Version scheme

A version is composed of 3 numbers : "x.y.z".
x is the major version number.
y is the minor version number.
z is the micro version number.

2 different values of major version number means that there are potential API breaks.
So, between 2 versions with the same major version number, there should be no API break, with the exception of 0 as the major version number.

The minor version number indicates new features or refactoring.
An even minor version number indicates a stable version.
A odd minor version number indicates a development version.

For a stable version, the micro version number indicates bug fixes.
For a development version, the micro version number indicates new features, refactoring or bug fixes.
